package fiuba.algo3.vista;

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;

import javax.swing.*;

import fiuba.algo3.control.Controlador;
import fiuba.algo3.modelo.Dificultad;
import fiuba.algo3.modelo.vehiculo.Auto;
import fiuba.algo3.modelo.vehiculo.Moto;
import fiuba.algo3.modelo.vehiculo.TipoDeVehiculo;
import fiuba.algo3.modelo.vehiculo.TodoTerreno;
import fiuba.algo3.usuario.Usuario;

@SuppressWarnings("serial")
public class SeleccionDeDificultadYVehiculo extends JInternalFrame implements ActionListener{
		
	private JFPrincipal principal;
	private Controlador controlador;
	private JLabel texto;
	private JButton aceptar;
	private JList<Dificultad> dificultad;
	private JList<String> vehiculo;
	private JPanel contentpane;
	private Dificultad[] dificultades = {(Dificultad.DIFICIL), (Dificultad.MODERADA), (Dificultad.FACIL)};
	private String[] vehiculos = {"Auto","Moto","Todo terreno"};
	private Dificultad opcionDificultad;
	private String opcionVehiculo;
	private Usuario usuario;
	private int maxWidth;
	private int maxHeight;
	
	public SeleccionDeDificultadYVehiculo(int margenIzquierdo,int margenSuperior,int maxWidth,int maxHeight,Usuario usuario,Controlador controlador,JFPrincipal principal){
		
		this.principal = principal;
		this.controlador = controlador;
		this.maxWidth = maxWidth;
		this.maxHeight = maxHeight;
		this.usuario = usuario;

		this.setLayout(null);
		
		//colorearlo
		setBackground(new Color(153,153,204));
		
		//elimar bordes y northPane
		this.setBorder(null);
		javax.swing.plaf.InternalFrameUI ifu= this.getUI();
		((javax.swing.plaf.basic.BasicInternalFrameUI)ifu).setNorthPane(null);
		
		//crea un label con el texto
		texto=new JLabel("Seleccione dificultad y vehiculo.");
		texto.setBounds((maxWidth-200)/2,100,200,40);
		this.add(texto);
		
		//crear boton
		aceptar = new JButton ("Aceptar");
		aceptar.setBounds((maxWidth-200)/2,(maxHeight+210)/2,200,40);
		aceptar.addActionListener(this);
		this.add(aceptar);
		
		//crear lista
		contentpane = new JPanel();
		contentpane.setLayout(null);
		dificultad = new JList<Dificultad>(dificultades);
		dificultad.setSelectedIndex(0);
		dificultad.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		dificultad.setBounds(0,0,80,100);
		dificultad.setVisible(true);
		
		vehiculo = new JList<String>(vehiculos);
		vehiculo.setSelectedIndex(0);
		vehiculo.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		vehiculo.setBounds(100,0,80,100);
		vehiculo.setVisible(true);
		
		contentpane.add(vehiculo);
		contentpane.add(dificultad);
		contentpane.setBounds((maxWidth-200)/2,(maxHeight-200)/2,180,100);
		contentpane.setVisible(true);
		
		this.add(contentpane);
		this.setBounds(margenIzquierdo,margenSuperior,maxWidth,maxHeight);
		this.setVisible(true);
		this.setResizable(false);
		this.setMaximizable(false);

	}
	
	@Override
	public void actionPerformed(ActionEvent e){
		//si se hace clic en guardar.
    	if (e.getSource()== aceptar){
    		//selecciona un elemento de la lista
    		this.setVisible(false);
    		opcionDificultad = dificultad.getSelectedValue();
    		opcionVehiculo = vehiculo.getSelectedValue();
    		
    		TipoDeVehiculo tipo = null;
    		if(opcionVehiculo.equals("Moto")) 
    			tipo = new Moto();
    		else if(opcionVehiculo.equals("Todo terreno"))
    			tipo = new TodoTerreno();
    		else if(opcionVehiculo.equals("Auto")) 
    			tipo = new Auto();
    		
    		try {
				controlador.nuevoJuego(usuario, opcionDificultad, tipo);
			} catch (IOException e1) {
				//si la partida no existe crea un cartel con el mensaje "NOMBRE YA UTILIZADO"
				new WCartelDeAlerta("NOMBRE YA UTILIZADO",principal);
	    		principal.bienvenida();
			}
			principal.iniciarJuego(maxWidth,maxHeight);
		}
	}
}